package com.huazi.www.drug.drugz.service.impl;


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.huazi.www.drug.drugz.dao.DrugDao;
import com.huazi.www.drug.drugz.dao.impl.DrugDaoImpl;
import com.huazi.www.drug.drugz.enity.Drug;
import com.huazi.www.drug.drugz.enity.DrugStock;
import com.huazi.www.drug.drugz.enity.Medicate;
import com.huazi.www.drug.drugz.service.DrugService;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * @description：业务逻辑的实现
 * @author：zt
 * @date：2021/5/8 10:19
 * @versions：v1.0
 */
public class DrugServiceImpl implements DrugService {

    //dao层对象
    DrugDao drugDao = new DrugDaoImpl();

    //初始化下拉框  药品编号和药品名称
    @Override
    public List<Drug> list() {
        return drugDao.list();
    }

    //检查库存      药品编号、名称、数量
    @Override
    public List<Drug> drugs() {
        return drugDao.drugs();
    }

    //根据药品编号查询价格   以弃用
//    @Override
//    public double price(int id) {
//        return drugDao.price(id);
//    }

    //新增库存申请
    @Override
    public boolean inStore(Medicate medicate) {
        return drugDao.inStore(medicate) == 1;
    }

    //新增药品申请
    @Override
    public boolean addDrug(Medicate medicate) {
        return drugDao.addDrug(medicate) == 1;
    }

    //json对象  申请记录
    @Override
    public JSONObject selPage(int xuTime, int type, int pageSize, int currentPage) {

        JSONObject jsOb = new JSONObject();   //json对象

        jsOb.put("code", 0);    //状态码 code
        jsOb.put("msg", "");    //错误提示 msg

        int count = drugDao.totalCount(xuTime, type);    //查询总记录数

        jsOb.put("count", count);  //记录数 count


        int start = (currentPage - 1) * pageSize;    //计算起始下标

        List<Medicate> list = drugDao.list(xuTime, type, start, pageSize);    //查询每页的数据

        //分页数据 date
        jsOb.put("data", JSON.toJSON(list));    //将查询出的集合转换成JSON数据  toJSON

        return jsOb;   //返回json对象
    }

    //分页查询 药品
    @Override
    public JSONObject selPage(String drugName, int drugType, int pageSize, int currentPage) {

        JSONObject jsOb = new JSONObject();    //JSONObject json对象

        jsOb.put("code", 0);                   //添加 状态码 code

        jsOb.put("msg", "");                   //添加 错误提示  msg

        if (drugName == null || drugName.equals("")) {    //药品名称的空值处理
            drugName = "";
        }
        int count = drugDao.totalCount(drugName, drugType);   //根据药品名称和药品类型查询记录数

        jsOb.put("count", count);                            //添加 记录数

        int start = (currentPage - 1) * pageSize;            //计算起始下标

        List<Drug> list = drugDao.list(drugName, drugType, start, pageSize);    //获得分页数据 list

        jsOb.put("data", JSON.toJSON(list));                //添加数据 data JSON.toJSON(list);

        return jsOb;    //返回jsonObject对象
    }

    //药品管理
    @Override
    public int store(Medicate medicate) {

        String type = medicate.getType();     //得到申请记录的类型

        //根据申请类型处理不同的申请
        if (type.equals("补充库存")) {    //补充库存

            SimpleDateFormat simp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  //日期数据转换  ("yyyy-MM-dd HH:mm:ss")

            String date = simp.format(medicate.getDate());     //将日期转换成时间字符串  format(申请对象的时间);

            List<DrugStock> list = drugDao.list(date);         //通过时间查询同一批申请药品  list

            for (int i = 0; i < list.size(); i++) {            //循环遍历
                drugDao.replenish(list.get(i).getDrugId(), list.get(i).getCount());    //更新药品的数量
            }

            drugDao.updMedicate(medicate.getId());    //更改申请记录  upMed 2

            return 1;
        } else if (type.equals("新增药品")) {    //新增药品

            String applyDrug = medicate.getApplyDrug();     //新增药品名称
            int drugType = medicate.getDrugType();          //新增药品类型
            double price = medicate.getPrice();             //新增药品价格
            int count = medicate.getCount();                //新增药品数量
            String remark = medicate.getRemark();           //备注
            Drug drug = new Drug(applyDrug, drugType, price, count, remark);    //新增药品对象
            drugDao.addDrug(drug);     //添加药品
            drugDao.updMedicate(medicate.getId());    //更新申请状态  upMed 2
            return 2;
        }
        return 0;
    }

    public boolean updDrug(int drugID, String drugField, String value) {
        return drugDao.updDrug(drugID, drugField, value) == 1;
    }

    //同一批库存药品的记录
    @Override
    public int drugStork(List<DrugStock> list, Date date) {
        int count = 0;
        for (int i = 0; i < list.size(); i++) {
            count += drugDao.drugStork(list.get(i), date);
        }
        return count;
    }

    //按时间查询同一批库存药品名单
    @Override
    public List<DrugStock> list(String date) {
        return drugDao.list(date);
    }

}
